package com.cjm.algorithm.dp;

public class Ti343 {
    public static void main(String[] args) {
        Ti343 ti343 = new Ti343();
        System.err.println(ti343.integerBreak(3));
        System.err.println(ti343.integerBreak(4));
        System.err.println(ti343.integerBreak(5));
        System.err.println(ti343.integerBreak(6));
        System.err.println(ti343.integerBreak(7));
        System.err.println(ti343.integerBreak(10));
    }
    public int integerBreak(int n) {
        int[] dp = new int[n+1];
        dp[0] = 0;
        dp[1] = 0;
        // 上面的两个拆分， 没有意义
        dp[2] = 1;
        // 这里的dp[2] = 1+1=1*1=1
        // 所以从i=3开始遍历， 一直到dp[i]
        for (int i = 3; i <= n; i++) {
            // 这里开始遍历j， 也就是一个数会分为【1, i-1】、【2, i-2】，【3,i-3】， 然后它们的乘积
            // 又分为【1, dp[i-1]】，【2, dp[i-2]】，【3, dp[i-3]】，
            // 然后又需要加以对比dp[i]，因为dp[i]一直在比较中
            for (int j = 1; j < i - 1; j++) {
                dp[i] = Math.max(dp[i], j * (i - j));
                dp[i] = Math.max(dp[i], j * dp[i - j]);
            }
        }
        return dp[n];
    }
}
